#!/usr/bin/env python3
"""
智能装修设计系统安装脚本
"""
import os
import sys
import subprocess
from pathlib import Path

def run_command(command, description):
    """运行命令并处理错误"""
    print(f"正在{description}...")
    try:
        result = subprocess.run(command, shell=True, check=True, capture_output=True, text=True)
        print(f"✅ {description}成功")
        return True
    except subprocess.CalledProcessError as e:
        print(f"❌ {description}失败: {e.stderr}")
        return False

def setup_backend():
    """设置后端环境"""
    print("🔧 设置后端环境...")
    
    # 创建虚拟环境
    if not os.path.exists('venv'):
        if not run_command('python -m venv venv', '创建虚拟环境'):
            return False
    
    # 激活虚拟环境并安装依赖
    if sys.platform == 'win32':
        activate_cmd = 'venv\\Scripts\\activate'
        pip_cmd = 'venv\\Scripts\\pip'
    else:
        activate_cmd = 'source venv/bin/activate'
        pip_cmd = 'venv/bin/pip'
    
    # 升级pip
    if not run_command(f'{pip_cmd} install --upgrade pip', '升级pip'):
        return False
    
    # 安装Python依赖
    if not run_command(f'{pip_cmd} install -r requirements.txt', '安装Python依赖'):
        return False
    
    return True

def setup_frontend():
    """设置前端环境"""
    print("🎨 设置前端环境...")
    
    # 检查Node.js
    try:
        result = subprocess.run('node --version', shell=True, capture_output=True, text=True)
        if result.returncode != 0:
            print("❌ 未找到Node.js，请先安装Node.js")
            return False
        print(f"✅ Node.js版本: {result.stdout.strip()}")
    except:
        print("❌ 未找到Node.js，请先安装Node.js")
        return False
    
    # 安装前端依赖
    os.chdir('frontend')
    if not run_command('npm install', '安装前端依赖'):
        os.chdir('..')
        return False
    
    # 构建前端
    if not run_command('npm run build', '构建前端'):
        os.chdir('..')
        return False
    
    os.chdir('..')
    return True

def create_directories():
    """创建必要的目录"""
    print("📁 创建必要目录...")
    
    directories = [
        'uploads',
        'app/static',
        'app/templates',
        'logs'
    ]
    
    for directory in directories:
        os.makedirs(directory, exist_ok=True)
        print(f"✅ 创建目录: {directory}")
    
    return True

def init_database():
    """初始化数据库"""
    print("🗄️ 初始化数据库...")
    
    # 设置环境变量
    os.environ['FLASK_APP'] = 'run.py'
    
    # 初始化数据库
    if not run_command('python run.py init-db', '初始化数据库'):
        return False
    
    return True

def main():
    """主函数"""
    print("🚀 开始设置智能装修设计系统...")
    print("=" * 50)
    
    # 检查Python版本
    if sys.version_info < (3, 8):
        print("❌ 需要Python 3.8或更高版本")
        sys.exit(1)
    
    print(f"✅ Python版本: {sys.version}")
    
    # 创建目录
    if not create_directories():
        sys.exit(1)
    
    # 设置后端
    if not setup_backend():
        sys.exit(1)
    
    # 设置前端
    if not setup_frontend():
        sys.exit(1)
    
    # 初始化数据库
    if not init_database():
        sys.exit(1)
    
    print("=" * 50)
    print("🎉 设置完成!")
    print("\n📋 下一步:")
    print("1. 复制 .env.example 为 .env 并配置相关参数")
    print("2. 运行 'python run.py' 启动应用")
    print("3. 访问 http://localhost:5000 查看应用")
    print("\n💡 提示:")
    print("- 确保已配置OSS和Coze API的相关参数")
    print("- 生产环境请修改SECRET_KEY")

if __name__ == '__main__':
    main()
